package com.exmple.testespresso.activity

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import com.exmple.testespresso.R
import com.exmple.testespresso.utils.ToastUtil

/*
Espresso
https://developer.android.google.cn/training/testing/espresso?hl=zh-cn

Espresso 设置说明
https://lovexiaov.gitbooks.io/official-espresso-doc/content/chapter2.html

https://lovexiaov.gitbooks.io/official-espresso-doc/content/chapter1.html

Android Espresso(UI自动化测试)
https://www.jianshu.com/p/a15cc6f5f7e4

Espresso之Matcher
https://www.jianshu.com/p/662a07e5e828


Android自动化测试入门(三)Espresso
https://github.com/chsmy/AndroidDailyText

Android 利用  espress进行UI自动化测试
https://www.lmlphp.com/user/16643/article/item/551054/

JUnit单元测试6—@Rule注解
https://www.jianshu.com/p/e74ca1b42730

monkey测试

Android monkey测试
https://blog.csdn.net/weixin_50828989/article/details/119418577


adb shell pm list packages        查看手机所有的安装包
adb shell pm list packages -3    查看手机上所有的第三方安装包

二、简单的monkey测试指令
-p参数：表示指定测试的程序（空格后面跟安装包名字，拿刚才的第三方安装包一个个试）

-v参数：表示查看monkey执行过程的信息(日志级别）（-v 越多越详细，最多三个）

数字100:表示测试事件数为100


 adb shell monkey  -p  com.tencent.news  -v -v -v  100   （此时指定软件会被打开并开始乱点乱按）指定一个包
 adb shell monkey -p com.tencent.news -p com.pdfreader -p com.widgets  -v 1000  指定多个包
 adb shell monkey -v 1000    不指定包

示例：adb shell monkey -p com.exmple.testespresso -v -v -v 500>D:TestMonkey.txt // 保存日志
在日志文件里分别搜索exception，anr，crash 三个关键词


android monkey测试步骤,android Monkey 测试技巧
https://blog.csdn.net/weixin_35924166/article/details/117567356


Android Studio执行单元测试时提示Injecting to another application requires INJECT_EVENTS permission】
http://t.zoukankan.com/xmmc-p-13710334.html

2）解决方案：

开发者选项里面---》打开USB调试（安全设置）

备注：打开这个就允许通过USB调试修改权限或模拟点击事件了



必学Android程序员的三种自动化测试方法
https://blog.csdn.net/weixin_31887861/article/details/117541120




UI Automator 是一个界面测试框架，适用于整个系统上以及多个已安装应用间的跨应用功能界面测试。
https://developer.android.google.cn/training/testing/ui-automator

测试多个应用的界面
https://developer.android.google.cn/training/testing/ui-testing/uiautomator-testing

  AndroidSDK 自带定位工具 uiautomatorviewer
    http://t.zoukankan.com/guo2733-p-10556791.html

    uiautomatorviewer无法启动: 原因：java版本过高
    https://blog.csdn.net/dorisx/article/details/124021082


    关于 android 工具 uiautomatorviewer.bat 无法正常启动的问题
    https://blog.csdn.net/A951860555/article/details/121046647

     uiautomatorviewer 启动出错
    https://juejin.cn/post/7012625112448892941



    Android自动化框架uiautomator简介
    https://www.cnblogs.com/123blog/p/12594714.html


    构建本地单元测试
    https://developer.android.google.cn/training/testing/unit-testing/local-unit-tests


 */
class MainActivity : AppCompatActivity() {
    private lateinit var login_et_moiblie_no: AppCompatEditText
    private lateinit var login_et_sms_code: AppCompatEditText
    private lateinit var tv_login: AppCompatTextView
    private lateinit var tv_text: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
        initEvent()
    }

    private fun initView() {
        tv_text = findViewById(R.id.tv_text)
        tv_login = findViewById(R.id.tv_login)
        login_et_sms_code = findViewById(R.id.login_et_sms_code)
        login_et_moiblie_no = findViewById(R.id.login_et_moiblie_no)
    }

    private fun initEvent() {
        findViewById<TextView>(R.id.tv_click).setOnClickListener() {
            if (login_et_moiblie_no.text!!.isEmpty()) {
                tv_text.setText("新的内容")
            } else {
                tv_text.setText(login_et_moiblie_no.text)
            }
        }

        tv_login.setOnClickListener {
            login()

        }

        findViewById<TextView>(R.id.tv_open_second).setOnClickListener {
            startActivity(Intent(this, SecondActivity::class.java))
        }
    }

    private fun login() {
        if (login_et_moiblie_no.text!!.length != 10 || login_et_sms_code.text!!.length != 4) {
            ToastUtil.show(R.string.login_error_tip)
            return
        }

        ToastUtil.show(R.string.login_success_tip)
    }
}